home *** CD-ROM | disk | FTP | other *** search
/ Speccy ClassiX 1998 / Speccy ClassiX 98.iso / amiga_system / the_aminet / dev / gcc / ixemulsrc.lha / ixemul-41.4 / library / pipe.dos.c < prev    next >
C/C++ Source or Header  |  1995-05-28  |  2KB  |  90 lines

  1. /*
  2.  *  This file is part of ixemul.library for the Amiga.
  3.  *  Copyright (C) 1991, 1992  Markus M. Wild
  4.  *
  5.  *  This library is free software; you can redistribute it and/or
  6.  *  modify it under the terms of the GNU Library General Public
  7.  *  License as published by the Free Software Foundation; either
  8.  *  version 2 of the License, or (at your option) any later version.
  9.  *
  10.  *  This library is distributed in the hope that it will be useful,
  11.  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  13.  *  Library General Public License for more details.
  14.  *
  15.  *  You should have received a copy of the GNU Library General Public
  16.  *  License along with this library; if not, write to the Free
  17.  *  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  18.  *
  19.  *  pipe.dos.c,v 1.1.1.1 1994/04/04 04:29:55 amiga Exp
  20.  *
  21.  *  pipe.dos.c,v
  22.  * Revision 1.1.1.1  1994/04/04  04:29:55  amiga
  23.  * Initial CVS check in.
  24.  *
  25.  *  Revision 1.1  1992/05/14  19:55:40  mwild
  26.  *  Initial revision
  27.  *
  28.  */
  29.  
  30. #define KERNEL
  31. #include "ixemul.h"
  32. #include "kprintf.h"
  33.  
  34. extern int __read(), __write(), __ioctl(), __fselect(), __close();
  35.  
  36. int
  37. pipe (int pv[2])
  38. {
  39.   BPTR bpv[2];
  40.   struct file *f1, *f2;
  41.   int res, err, omask;
  42.   
  43.   omask = syscall (SYS_sigsetmask, ~0);
  44.   res = -1; 
  45.   err = EMFILE;
  46.   if (__pipe (bpv))
  47.     {
  48.       if (! falloc (&f1, pv))
  49.         {
  50.           if (! falloc (&f2, pv+1))
  51.             {
  52.               f1->f_fh = BTOCPTR (bpv[0]);
  53.           __init_std_packet (& f1->f_sp);
  54.           __fstat (f1);
  55.           f1->f_flags  = FREAD;
  56.           f1->f_type   = DTYPE_FILE;
  57.           f1->f_read   = __read;
  58.           f1->f_write  = 0;
  59.           f1->f_ioctl  = __ioctl;
  60.           f1->f_close  = __close;
  61.           f1->f_select = __fselect;
  62.  
  63.               f2->f_fh = BTOCPTR (bpv[1]);
  64.           __init_std_packet (& f2->f_sp);
  65.           __fstat (f2);
  66.           f2->f_flags  = FWRITE;
  67.           f2->f_type   = DTYPE_FILE;
  68.           f2->f_read   = 0;
  69.           f2->f_write  = __write;
  70.           f2->f_ioctl  = __ioctl;
  71.           f2->f_close  = __close;
  72.           f2->f_select = __fselect;
  73.  
  74.           res = err =0;
  75.           goto ret;
  76.         }
  77.       f1->f_count = 0;
  78.     }
  79.       __Close (bpv[0]);
  80.       __Close (bpv[1]);
  81.     }
  82.  
  83. ret:
  84.   syscall (SYS_sigsetmask, omask);
  85.  
  86.   errno = err;
  87.   KPRINTF (("&errno = %lx, errno = %ld\n", &errno, errno));
  88.   return res;
  89. }
  90.